import gym

'''
包装器wrappers：在不修改底层代码的情况下，对已有的环境进行修改

Gym 提供的常用 Wrappers
TimeLimit:
功能：为环境设置最大时间步数。当超过时间步数后，会发送一个 done 信号。
适用场景：当环境没有明确终止条件时，用 TimeLimit 限制任务长度。

ClipAction:
功能：将动作裁剪到合法范围内（Box 空间）。
适用场景：防止强化学习算法生成超出动作空间范围的无效动作。

RescaleAction:
功能：将动作空间重新缩放到指定范围（min_action 到 max_action）。
适用场景：当强化学习算法需要统一的动作范围时非常有用。

TimeAwareObservation:
功能：在观察值中添加时间步索引（timestep）。
适用场景：当需要确保环境的状态满足马尔科夫性质时，时间步索引可能是关键信息。
'''
# 创建基础环境
base_env = gym.make("BipedalWalker-v3")
#  Wrappers 是通过包装基础环境来工作的。例如，RescaleAction 包装器将动作空间缩放到指定范围：
from gym.wrappers import RescaleAction

wrapped_env = RescaleAction(base_env, min_action=0, max_action=1)
# 包装器会对环境的行为或属性做出修改
base_env.action_space  # 动作空间: Box([-1, -1, ..., -1], [1, 1, ..., 1], ...)
wrapped_env.action_space  # 动作空间: Box([0, 0, ..., 0], [1, 1, ..., 1], ...)



#  conda install -c conda-forge box2d-py